/**
 * 将视频重新编码为指定的速度
 *
 * ```shell
 * $ deno run --allow-run --allow-read --allow-write src/speed-up.js -s 1.5 -i temp/input.mp4 -o temp/output.mp4
 * ```
 *
 * 命令行参数说明：
 * 1. -s : 视频速度，默认 1.5 倍速
 * 2. -i : 输入视频，默认为 temp/input.mp4
 * 3. -o : 输出视频，默认为 temp/output-${speed}.mp4，无 -o 键的参数也统一作为 -o 的值
 */

import { parse } from "/deno.land/std/flags/mod.ts";
import { ffmpeg } from "./share/ffmpeg.js";
import { log } from "./share/common.js";

// 解析命令行参数
const parsedArgs = parse(Deno.args);

// 构建 ffmpeg 参数
const ffmpegArgs = { "-strict": "strict" };

// 1. 输入文件名，默认 "temp/input.mp4"
ffmpegArgs["-i"] = Object.hasOwn(parsedArgs, "i") ? parsedArgs["i"] : "temp/input.mp4";

// 2. 速度：默认 1.5 倍速
const speed = Object.hasOwn(parsedArgs, "s") ? parsedArgs["s"] : 1.5;
ffmpegArgs["-vf"] = `setpts=PTS/${speed}`; // 视频加速
ffmpegArgs["-af"] = `atempo=${speed}`; // 音频加速

// 3. 如果有 -y -n --vf 等自定义的参数也添加进去，方便自定义额外的 ffmpeg 参数
if (Object.hasOwn(parsedArgs, "y")) ffmpegArgs["-y"] = true;
if (Object.hasOwn(parsedArgs, "n")) ffmpegArgs["-n"] = true;
if (Object.hasOwn(parsedArgs, "vf")) {
  ffmpegArgs["-vf"] = Object.hasOwn(ffmpegArgs, "-vf") ? `${ffmpegArgs["-vf"]},${parsedArgs["vf"]}` : parsedArgs["vf"];
}

// 4. 输出文件名列表，默认 "temp/output-${speed}.mp4"
ffmpegArgs["_"] = parsedArgs["_"];
if (Object.hasOwn(parsedArgs, "o")) ffmpegArgs["_"].push(parsedArgs["o"]);
if (ffmpegArgs["_"].length === 0) ffmpegArgs["_"].push(`temp/output-${speed}.mp4`);

log(`开始生成 ${speed} 倍速的视频`);

// 执行 ffmpeg 处理
await ffmpeg(ffmpegArgs, true);

log(`结束`);
